ShowTable of Contents
はじめに
「htmlFilter」 と 「htmlFilterIn」 プロパティはリッチテキスト・編集ボックス・複数行編集ボックスの各コントロールで指定できるプロパティです。
Lotus Notes 文書を XPages で表示するときに、表示フィールドに悪意のスクリプトが埋め込まれれことで問題が起こることがあります。そのような悪意のあるスクリプトを表示させない、あるいは文書の保存の際にはスクリプトを保存させないために、入出力時のフィルタを設定するために、これらのプロパティを使用します。
プロパティの違いと設定できるフィルタ
この2つのプロパティのうち「htmlFilter」 プロパティは、保存される文書のデータを XPages で
表示するときのフィルタを設定します。
一方、「htmlFilterIn」 プロパティは、XPages で編集した文章を
保存するときのフィルタを設定します。
指定できるフィルターは以下の4つです。デフォルトでは何も指定されていませんん。
- 「identity」 ・・・ コンテンツの内容に手を加えない
- 「acf」 ・・・ Active Content Filter (ACF) によるフィルタリングを行い、潜在的な危険性を持つ
- 「empty」 ・・・ コンテンツのすべての内容を削除する
- 「striptags」 ・・・ タグをすべて取り去り、平文のみを残す
参考文献: XPages Wiki の 「Work with RichText」
動作の詳細
これらの2つのプロパティの違いを見るために、10個のリッチテキストフィールドを持つフォームを作成し、このフォームの表示する XPage を作成し、リッチテキストコントロールでこれらのフィールドを表示・編集できるようにします。
フィールド名 | リッチテキストコントロールの
「htmlFilter」 プロパティの値 | リッチテキストコントロールの
「htmlFilterIn」 プロパティの値 |
Body01 | 設定なし | 設定なし |
Body02 | identity | 設定なし |
Body03 | acf | 設定なし |
Body04 | empty | 設定なし |
Body05 | striptags | 設定なし |
Body01_1 | 設定なし | 設定なし |
Body02_1 | 設定なし | identity |
Body03_1 | 設定なし | acf |
Body04_1 | 設定なし | empty |
Body05_1 | 設定なし | striptags |
リッチテキストフィールドでテストするコンテンツとして以下の内容を使用します。これは 「htmlFilter」プロパティのテストをする、最初の5つのフィールドにLotus Notes から設定します。
最初のボタンには JavaScript で以下のようなコードを記述します。
次のボタンには LotusScript で以下のようなコードを記述します。
XPages ではなく、Domino HTML で表示すると、これらの文書はそのまま表示され、どちらのボタンも JavaScript の alert() として埋め込まれて、Web ブラウザで実行することが可能です。
htmlFilter プロパティ
あらかじめ Lotus Notes でリッチテキストフィールドに上記のような装飾つきの文字列やボタンを入力した文書を、XPages から開きます。そして、入力した内容がどのように表示されるかを比較します。
リッチテキストコントロールの
「htmlFilter」 プロパティの値 | XPages で表示されたページの状態 |
設定なし | 「acf」が指定されたときと同じ状態。 |
identity | 文字の装飾やボタンがそのまま表示され、ボタンを押すとダイアログボックスが表示されます。Web ブラウザでソースを確認すると、どちらのボタンも JavaScript で実装されたスクリプトが記述されています。 |
acf | 文字の装飾やボタンがそのまま表示されますが、ボタンを押しても何も起こりません。ボタンの Web ブラウザでソースを確認すると、onClick イベントの内容は空文字となっています。 |
empty | リッチテキスとの内容はまったく表示されません。 |
striptags | 文字の装飾がすべてなくなり平文として表示されます。ボタンは表示されません。 |
XPage で表示される画面のイメージは以下になります。
htmlFilterIn プロパティ
「htmlFilterIn」プロパティは、XPages で編集し保存されるときのフィルターを設定します。このフィルターの動きを調べるには XPages で編集している画面にでリッチテキストコントロールに装飾つきの文字列やスクリプトを記述したコンテンツを入力する必要があります。
そこで、先ほど htmlFilter=identity で表示された 「Body02」 フィールドの内容をコピー&ペーストして、「htmlFilterIn」プロパティを設定したフィールドに入力し、文書を保存することとします。そしてその保存内容を Lotus Notes から確認します。
リッチテキストコントロールの
「htmlFilterIn」 プロパティの値 | Lotus Notes で確認したリッチテキストフィールドの状態 |
設定なし | 「identity」が指定されたときと同じ状態。 |
identity | 文字の装飾やボタンがそのまま保存され、ボタンを押すとダイアログボックスが表示されます。Lotus Notesでソースを確認すると、どちらのボタンも JavaScript で実装されたスクリプトが記述されています。 |
acf | 文字の装飾やボタンがそのまま保存されますが、ボタンを押しても何も起こりません。ボタンの Lotus Notes でソースを確認すると、JavaScript が選択されていますが、スクリプトは記述されていません。 |
empty | リッチテキスとの内容は空で保存されます。 |
striptags | 文字の装飾がすべてなくなり平文として保存されます。ボタンは保存されません。 |
保存された文書を Lotus Notes から見たときのイメージは以下になります。